| Conditions | 1 |
| Paths | 2 |
| Total Lines | 159 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 2 | ||
| Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | /** |
||
| 16 | function (state, format, visibility, data, util) { |
||
| 17 | let ct = this; |
||
| 18 | ct.state = state; |
||
| 19 | ct.data = data; |
||
| 20 | ct.util = util; |
||
| 21 | ct.format = format; |
||
| 22 | |||
| 23 | ct.getReactorArea = function(player) { |
||
| 24 | let level = player.global_upgrades.fusion_area; |
||
| 25 | let upgrade = data.global_upgrades.fusion_area; |
||
| 26 | let basePower = upgrade.power; |
||
| 27 | let multiplier = upgrade.power_mult; |
||
| 28 | return basePower * Math.floor(multiplier * level); |
||
| 29 | }; |
||
| 30 | |||
| 31 | ct.getBandwidth = function(player){ |
||
| 32 | let level = player.global_upgrades.fusion_bandwidth; |
||
| 33 | let upgrade = data.global_upgrades.fusion_bandwidth; |
||
| 34 | let basePower = upgrade.power; |
||
| 35 | let exp = upgrade.power_exp; |
||
| 36 | return basePower * Math.pow(exp, level); |
||
| 37 | } |
||
| 38 | |||
| 39 | function getRadius(resource) { |
||
| 40 | let isotope = data.resources[resource]; |
||
| 41 | let A = isotope.energy/data.constants.U_TO_EV; |
||
| 42 | return data.constants.FERMI_RADIUS * Math.pow(A, 0.3333); |
||
| 43 | } |
||
| 44 | |||
| 45 | function getZ(resource){ |
||
| 46 | let isotope = data.resources[resource]; |
||
| 47 | let element = Object.keys(isotope.elements)[0]; |
||
| 48 | return data.elements[element].number; |
||
| 49 | } |
||
| 50 | |||
| 51 | ct.getCapacity = function(resource, player) { |
||
| 52 | let r = getRadius(resource); |
||
| 53 | let area = Math.PI*r*r; |
||
| 54 | return ct.getReactorArea(player)/area; |
||
| 55 | }; |
||
| 56 | |||
| 57 | ct.getProductIsotope = function(beam, target) { |
||
| 58 | if(!beam || !target) { |
||
| 59 | return false; |
||
| 60 | } |
||
| 61 | |||
| 62 | let beamN = parseInt(beam, 10); |
||
| 63 | let targetN = parseInt(target, 10); |
||
| 64 | |||
| 65 | let beamZ = getZ(beam); |
||
| 66 | let targetZ = getZ(target); |
||
| 67 | |||
| 68 | let productN = beamN+targetN; |
||
| 69 | let productZ = beamZ+targetZ; |
||
| 70 | |||
| 71 | return data.resource_matrix[productZ][productN]; |
||
| 72 | }; |
||
| 73 | |||
| 74 | ct.getProductEnergy = function(beam, target) { |
||
| 75 | let product = ct.getProductIsotope(beam, target); |
||
| 76 | if(!product){ |
||
| 77 | return 0; |
||
| 78 | } |
||
| 79 | let beamBE = data.resources[beam].binding_energy; |
||
| 80 | let targetBE = data.resources[target].binding_energy; |
||
| 81 | let productBE = data.resources[product].binding_energy; |
||
| 82 | |||
| 83 | return productBE - (beamBE + targetBE); |
||
| 84 | }; |
||
| 85 | |||
| 86 | ct.getCoulombBarrier = function(beam, target) { |
||
| 87 | let beamZ = getZ(beam); |
||
| 88 | let beamR = getRadius(beam); |
||
| 89 | |||
| 90 | let targetZ = getZ(target); |
||
| 91 | let targetR = getRadius(target); |
||
| 92 | |||
| 93 | let coulombBarrier = data.constants.COULOMB_CONSTANT*beamZ*targetZ* |
||
| 94 | Math.pow(data.constants.ELECTRON_CHARGE, 2)/(beamR+targetR); |
||
| 95 | return coulombBarrier * data.constants.JOULE_TO_EV; |
||
| 96 | }; |
||
| 97 | |||
| 98 | ct.getYieldPercent = function(beam, target, player) { |
||
| 99 | let beamR = getRadius(beam); |
||
| 100 | let targetR = getRadius(target); |
||
| 101 | let beamArea = Math.PI*beamR*beamR; |
||
| 102 | let targetArea = Math.PI*targetR*targetR; |
||
| 103 | |||
| 104 | let beamPercentArea = beamArea*ct.state.beam.number/ct.getReactorArea(player); |
||
| 105 | let targetPercentArea = targetArea*ct.state.target.number/ct.getReactorArea(player); |
||
| 106 | |||
| 107 | return beamPercentArea*targetPercentArea; |
||
| 108 | }; |
||
| 109 | |||
| 110 | ct.getYield = function(beam, target, player){ |
||
| 111 | let percentYield = ct.getYieldPercent(beam, target, player); |
||
| 112 | return Math.floor(percentYield*ct.state.target.number); |
||
| 113 | }; |
||
| 114 | |||
| 115 | ct.getFusionReaction = function(player) { |
||
| 116 | let reaction = { |
||
| 117 | reactant: {}, |
||
| 118 | product: {} |
||
| 119 | }; |
||
| 120 | |||
| 121 | let beam = ct.state.beam.name; |
||
| 122 | let target = ct.state.target.name; |
||
| 123 | |||
| 124 | reaction.reactant[beam] = ct.state.beam.number; |
||
| 125 | reaction.reactant[target] = ct.state.target.number; |
||
| 126 | |||
| 127 | let coulombBarrier = ct.getCoulombBarrier(beam, target); |
||
| 128 | reaction.reactant.eV = coulombBarrier*ct.state.beam.number; |
||
| 129 | |||
| 130 | let product = ct.getProductIsotope(beam, target); |
||
| 131 | let numberYield = ct.getYield(beam, target, player); |
||
| 132 | |||
| 133 | reaction.product[product] = numberYield; |
||
| 134 | |||
| 135 | let energyExchange = ct.getProductEnergy(beam, target); |
||
| 136 | if(energyExchange < 0){ |
||
| 137 | reaction.reactant.eV += energyExchange*numberYield; |
||
| 138 | }else if(energyExchange > 0){ |
||
| 139 | reaction.product.eV = energyExchange*numberYield; |
||
| 140 | } |
||
| 141 | |||
| 142 | return reaction; |
||
| 143 | }; |
||
| 144 | |||
| 145 | function update(player){ |
||
|
|
|||
| 146 | let source1 = '2H'; |
||
| 147 | let source2 = '2H'; |
||
| 148 | |||
| 149 | let coulombBarrier = ct.getCoulombBarrier(source1, source2); |
||
| 150 | |||
| 151 | let quantity1 = ct.state.beam.number; |
||
| 152 | let quantity2 = ct.state.target.number; |
||
| 153 | |||
| 154 | let numberYield = ct.getYield(source1, source2, player); |
||
| 155 | |||
| 156 | let totalCoulomb = coulombBarrier*quantity1; |
||
| 157 | |||
| 158 | let product = ct.getProductIsotope(source1, source2); |
||
| 159 | |||
| 160 | // console.log(product); |
||
| 161 | // console.log("capacity "+capacity1); |
||
| 162 | // console.log("coulomb "+totalCoulomb); |
||
| 163 | // console.log("yield "+percentYield+" "+numberYield); |
||
| 164 | if(!product) return; |
||
| 165 | |||
| 166 | let energyExchange = ct.getProductEnergy(source1, source2); |
||
| 167 | // console.log(energyExchange); |
||
| 168 | if(energyExchange < 0){ |
||
| 169 | totalCoulomb += energyExchange*numberYield; |
||
| 170 | }else{ |
||
| 171 | // console.log("produced energy "+energyExchange*numberYield); |
||
| 172 | } |
||
| 173 | } |
||
| 174 | } |
||
| 175 | ]); |
||
| 176 |